// 路由鉴权
import router from './router'
import nprogress from 'nprogress'
//引入进度条样式
import 'nprogress/nprogress.css'
import useUserStore from './store/modules/user'
import pinia from './store'
import setting from './setting'
let userStore = useUserStore(pinia)

nprogress.configure({ showSpinner: false }) // 进度条配置:禁止旋转加载图标
// 全局前置守卫
router.beforeEach(async (to,_, next) => {
  // to: 去往哪
  // from: 从哪来
  // next: 放行
  document.title = `${setting.title}-${to.meta.title}`
  nprogress.start()
  let token = userStore.token
  let username = userStore.name;
  if (token) {
    // 登录成功想访问login，不能访问指向首页其余放行
    if (to.path == '/login') {
      next({ path: '/' })
    } else {
      if (username) {
        //放行
        next();
    } else {
        //如果没有用户信息,在守卫这里发请求获取到了用户信息再放行
        try {
            //获取用户信息
            await userStore.getUserInfo();
            //放行
            //万一:刷新的时候是异步路由,有可能获取到用户信息、异步路由还没有加载完毕,出现空白的效果
            next({...to});
        } catch (error) {
            //token过期:获取不到用户信息了
            //用户手动修改本地存储token
            //退出登录->用户相关的数据清空
            await userStore.userLogout();
            next({ path: '/login', query: { redirect: to.path } })
        }
    }
    }
  } else {
    to.path == '/login'
      ? next()
      : next({ path: '/login', query: { redirect: to.path } })
  }
})
// 全局后置守卫
router.afterEach(() => {
  nprogress.done()
})
